import numpy as np
from typing import Dict, Literal

class Config:
    REFER_TAG_IDS: Dict[int, Literal[
        'refer', 'left_refer', 'right_refer'
    ]] ={  # 桌面上的参考apriltag
        100: 'refer',  # 中间处的参考 (抓取参考系)
        101: 'refer',  # 中间处的参考 (抓取参考系)
        102: 'left_refer',  # 左侧的参考 (放置参考系)
        103: 'right_refer',  # 右侧的参考 (放置参考系)
    }
    REFER_TAG_SIZE = 0.08  # 参考apriltag边长, 单位m
    REFER_Y_DEPTH_DELTA = (0.7165 - 0.63) / 0.08  # 参考frame在桌上向y轴正方向移动1m产生的深度变化
    HEAD_DOWN_THETA = np.pi / 4  # 头和桌子夹角
    TARGET_SURFACE_HEIGHT = 0.085  # 抓取目标的离桌面高度
    YOLO_MODEL_NAME = 'yolo11s'  # 在../yolo_models文件夹下的目标物体上表面模型名

def target_center_from_xyxy(xyxy: np.ndarray, img_width: int, img_height: int):
    """ 基于目标的xyxy边界框, 计算抓取目标坐标系的原点在图像上的位置 """
    x = (xyxy[0] + xyxy[2]) / 2
    # x += (x - img_width / 2) * 0.05  # 由于是斜着看桌子, 中心点有少许偏移
    y = (xyxy[1] + xyxy[3]) / 2
    # y -= y * 0.05
    return np.array((x, y), np.int32)
